2.6.3 - Operátory a várazy
Operátory lze rozdělit několika způsoby. Mimo jiné na unární, binární, ternární, neboli na operátory s jedním, dvěma nebo třemi operandy. Operandy jsou data (většinou čísla), se kterými operátory (např. plus) pracují.
Unární operátory
| Operátor | Význam |
|---|---|
| +,- | unární plus, mínus |
| & | reference |
| ! | logická negace |
| toString() toNum() toBinary() |
přetypování |
| size() | vrací velikost objektu nebo pole |
Unární plus a mínus určuje znaménko čísla. Například ve výrazu 1 + (-2) je plus binární operátor (má dva operandy) a mínus je unární operátor (vztahuje se jen ke dvojce).
Priorita operátorů
Priorita operátorů stanovuje, která část výrazu se vyhodnotí dříve, pokud to není závorkami určeno jinak. Klasickým příkladem je vyhodnocení výrazu x = 1+1*0. Výsledkem bude samozřejmě číslo 1, protože operátor násobení má větší prioritu než operátor sčítání.
Pokud je výraz příliš složitý, je lepší používat závorky, protože některé operátory mají stejnou prioritu a není tedy jasné jakým zpusobem budou vyhodnoceny. Například výraz 120 / 4 * 5, výsledek může být 150 nebo 6. V tomto případě překladač postupuje zleva do prava, tedy první vyhodnotí výraz 120 / 4 a poté jej vynásobí pěti. Je to tedy stejné jako kdyby jste napsali (120 / 4) * 5. Pokud však má být výsledek 6, je třeba upravit výraz pomocí závorek do tvaru 120 / (4 * 5).
Binární operátory
| Operátor | Význam |
|---|---|
| = | přiřazení hodnoty |
| +, -, *, / | plus, mínus, krát, děleno |
| % | zbytek po celočíselném dělení |
| and | logický AND |
| or | logický OR |
| xor | logický XOR |
| . | přístup ke strukturovanému poli |
| < | menší než |
| > | větší než |
| <= | menší nebo rovno |
| >= | větší nebo rovno |
| == | rovnost |
| != | nerovnost |
U logických operátorů AND, OR, XOR a u výrazů pro porovnávání (<, > atd.) je výsledek vyhodnocen jako true (pravda) nebo false (nepravda). S temito operátory a výrazi se blíže seznámíme v další části, až se blíže seznámíte s podmínky a cykly, u kterých tyto výrazi nacházejí uplatnění.
Bohužel jazyl VAL3 nenabízí, jako mnoho jiných jazyků, operátory pro inkrementaci a dekrementaci, které usnadňují práci s proměnnýma zvláště číselnýma. Ovšem tyto operátory nebývají používány v takové míře jako například v jazyce C, tudíž to zase takový problém není.
Příklad 1
num x, y, z//deklarace tří numerických proměnných
num pole[10]//deklarace pole o velikosti 0-9
num delka_pole//deklarace proměnné, do které si uložíme délku pole
01:begin
02: x=y=z=20//inicializace x, y a z
03: putln(x)//zobrazí x na obrazovku
04: putln(x+(-10))
05: putln(x)
06: y=y/7//vydělí proměnnou y číslem 7 a výsledek uloží zpět do y
07: putln(y)
08: putln(toString(".5", y))//zobrazi promenonu y s platnosti na 5 desetinných míst
09: get(z)//načte vstup z klavesnice a uloží jej do proměnné z
10: put("Zadaly jste cislo ")//výpis řetězce na obrazovku
11: putln(z)
12: delka_pole=size(pole)//zjistí délu pole
13: put("Pole ma velikost ")
14: putln(delka_pole)
15: pole[5.835]=3//inicializuje šesté pole
16: pole[5]=1//změní šesté pole
17: putln(pole[5.835])//zobrazí pole číslo 5
18: putln(pole)
19:end
Výstup na uživatelské rozhraní:
2010
20
2.857
2.85714
Zadaly jste cislo 8
Pole ma velikos 10
1
20
V tomto příkladu jsme si ukázaly základní práci s proměnnýma, jejich inicializaci a změnu hodnot. Podívejme se tedy na tento příklad blíže.
Na řádku číslo 3 používáme funkci putln(), tato funkce slouží k výpisu textového řetězce nebo čísla na obrazovku MCP. Rozdíl me funkcí putln() a put() je ten, že první zmíněná za sebou zalomí řádek a při dalším výpisu se pokračuje na novém řádku. Na 4. řádku jsme zobrazily hodnotu x zvíšenou o číslo -10. Na výstupu se tedy zobrazí 10, jelokož x mělo hodnotu 20. Proměnná x však zůstane nezměněná protože jsme jí žádnou hodnotu nepřiřadily, což jsme si ověřily i výpisem na řádku 5.
Dále jsme si ukázaly příklad s desetinným číslem. Nejprve jsme x vydělily číslem 7, což je 20/7. Pokud se jej pokusíme zobrazit na obrazovce, číslo bude zaokrouhleno na 3 desetinná míst. Pro zobrazení jiného počtu slouží funkce toString(), která má 2 parametry. První určuje kolik desetinných míst má být zobrazeno a druhý jaké číslo má být převedeno na řetězec, jak je vidět i na řádku 8.
Na řádku 9 jsme si ukázaly vstup z klávesnice, k tomu slouží příkaz get(). Práce s vstupem z klávestice je jednoduchá, jen jako parametr zadáte proměnnou do, které se má vstup uložit. Pokud vstup ukládáte do numerické proměnné, jsou akceptovány pouze číselné hodnoty.
V další části jsme si ukázaly jak pomocí funkce size() jednoduše získat délku pole. Tu jsme si uložily do proměnné a poté vypsaly na obrazovku.
Nakonec jsme si ještě ukázaly přiřazení hodnot k poli. Pokud pozici v poli zadáme s desetinnou hodnotou, nebude na ni brán ohled a bude bez zaokrouhlení ořezána.
Příklad 2
Jelikož VAL3 jazyk nedisponuje žádným operátorem pro celočíselné dělení, ukážeme si ještě jednoduchý program, který tento problém řeší.
num x, y//deklarace proměnných
01:begin
02: put("Zadejte číslo pro celočíselné dělení: ")
03: get(x)//vstup z klávesnice
04: y=(x-x%11)/11//celočíselné dělení
05: putln(y)
05:end
Pro celočíselné dělení je zde nejnutnější řádek 4. Nejprve jsme od čísla x odečetly zbytek po jeho dělení, čímž dostaneme čistý násobek čísla 11, kterým dělíme. Poté již toto číslo jen vydělíme číslem 11, a dostáváme celé číslo.
RS40B - uživatelský manuál